//==========================================================================
// Copyright (c) 2000-2008,  Elastos, Inc.  All Rights Reserved.
//==========================================================================

#ifndef __ELASTOS_CONSOLE_H__
#define __ELASTOS_CONSOLE_H__

class ConsoleDev : public CDeviceDriver
{
public:
    CARAPI Read(
                    /* [in] */ Int64 u64Offset,
                    /* [in] */ Int32 bytesToRead,
                    /* [out] */ MemoryBuf * pBuffer,
                    /* [out] */ IEvent ** ppCompletionEvent);

    CARAPI WriteToCOM(const MemoryBuf & buffer);

    CARAPI Write(
                    /* [in] */ Int64 u64Offset,
                    /* [in] */ const MemoryBuf & buffer,
                    /* [out] */ Int32 * pBytesWritten,
                    /* [out] */ IEvent * * ppCompletionEvent);

    CARAPI Control(
                    /* [in] */ Handle32 nControlCode,
                    /* [in] */ const MemoryBuf & inBuffer,
                    /* [out] */ MemoryBuf * pOutBuffer,
                    /* [out] */ IEvent ** ppCompletionEvent);

    virtual void Dispose() {}

    ECode Initialize();

    ~ConsoleDev()
    {
        if (m_pWriteBuf) {
            free(m_pWriteBuf);
        }
    }

public:
    char           *m_pWriteBuf;
};

#endif // __ELASTOS_CONSOLE_H__
